package security;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-14
 * Time: 15:07
 */

public class TestDemo {

    private static int count;

    //直接在方法上面加锁
    synchronized private static void add(){
        count++;
    }
    //加上synchronized之后 那么线程就安全了
    //出现这样问题的原因 add操作 对于cpu来说 不是原子性的

    public static void main(String[] args) throws InterruptedException {
        //两个线程对同一变量进行自增操作
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                add();
            }
        });
        t1.start();
        Thread t2 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
               add();
            }
        });
        t2.start();

        //t1.join 就是让 main 线程等待 t1 结束. t2.join 让 main 线程等待 t2 结束.
        t1.join();
        t2.join();
        //是在main线程当中调用了join 那么main就要等待t1

        //出现的值大概都在6-7w左右  这就是线程不安全导致的
        //解决办法就是加锁
        System.out.println(count);
    }
}
